/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package laboratorio2;

/**
 *
 * @author ROGER DIAZ
 */
/*
 * Integrantes:
 * 
 * 
 * Juan de Dios Chivalan Rojas, 12175
 */

/**
 *Descripcion:
 * Nombre de Archivo:Lock.java
 */
public class Lock implements Estructura{
    
    //Atributos
    int[] clave; //listados para generar el largo de contrasenia
    private boolean estado;
    private int largo, contador=0,repet=0;//repet es cuando el usuario hace el candado y verifica que las 
    //veces que se mete valores para ver si concuerda con el largo del candado 
    
    //contador es para verificar cuantas veces se esta metiendo la clave, para manejar el listado
    private String bandera;
    
    //Constructores
    public Lock()
    {
        clave= new int[4];
        clave[0]= 9;
        clave[1]= 0;
        clave[2]= 21;
        clave[3]= 0;
        estado= false;
        largo=4;
        bandera="sin";
    }
    public Lock(int largo){
        clave= new int[largo];
        estado= false;
        this.largo=largo;
        bandera="con";
    }
    
    public String pressLock(int clave)//este metodo abre el candado.
    {
        try
        {
                String correcto="Correcto, Candado Abierto";
                if (this.getBandera().equals("sin"))
                {
                 if (this.clave[this.getRepet()]==clave)
                     this.setRepet(this.getRepet()+1);
                     if (this.getRepet()==4)
                         this.setEstado(true);
                         return correcto;
                }

                if (this.getBandera().equals("con"))
                {
                    if (this.clave[this.getRepet()]==clave)
                       this.setRepet(this.getRepet()+1);
                        if (this.getRepet()==this.getLargo())
                            this.setEstado(true);
                            return correcto; 
                }
                correcto="Erroneo,candado sellado";
                this.setRepet(-1);
                return correcto;
        } catch (Exception e)
        {
           System.out.println("Usted cometio un error debe reiniciar el candado para intentar de nuevo");
        }  
        return ("1");
    }
    
    public String reset(int largo)//este cambia la contrasenia del candado.
    {
       if(this.getRepet()==-1)
       {
           if (this.getBandera().equals("sin"))
                {
                    clave[0]= 9;
                    clave[1]= 0;
                    clave[2]= 21;
                    clave[3]= 0;
                    estado= false;
                    this.largo=4;
                    bandera="sin";
                    this.setContador(0);
                    this.setRepet(0);
                    return ("El candado fue reseteado de manera estandar.");
                }

                if (this.getBandera().equals("con"))
                {
                    estado= false;
                    this.setLargo(largo);
                    bandera="con";
                    this.setContador(0);
                    this.setRepet(0); 
                    return ("El candado fue reseteado del largo que lo solicito.");
                }
       }
       return ("1");
    }
    
    public String isLocked()//este metodo devuelve si esta cerrado o abierto.
    {
        if(this.getEstado()==false)
            return("El candado esta cerrado.");
        else
            return("El candado es abierto.");
    }
    
    public void locky()//cierra el candado y podes volver a intentar a ingresar tu clave.resetear candado actual
    {
        this.setContador(0);
        this.setRepet(0);
    }
    
    public void ingresoClave(int numero )//sirve para poder pedir contrasenia.
    {try
        {
                if (this.getBandera().equals("sin"))
                {
                 this.setBandera("sin");
                }
                if (this.getBandera().equals("con"))
                {
                 this.clave[this.getContador()]=numero;
                 this.setContador(this.getContador()+1);
                }
        } catch (Exception e)
        {
           System.out.println("Error al ingresar");
        }  
    }
    public void setEstado(boolean estado)
    {
        this.estado=estado;
    }
    public void setLargo(int largo)
    {
        this.largo=largo;
    }
    public void setContador(int contador)
    {
        this.contador=contador;
    }
    public void setRepet(int repet)
    {
        this.repet=repet;
    }
    public void setBandera(String bandera)
    {
        this.bandera=bandera;
    }
    public boolean getEstado()
    {
        return estado;
    }
    public int getLargo()
    {
        return largo;
    }
    public int getContador()
    {
        return contador;
    }
    public int getRepet()
    {
        return repet;
    }
    public String getBandera()
    {
        return bandera;
    }
}

